package com.hspedu.map_;

import java.util.*;

/**
 * @Author Stringzhua
 * @Date 2024/3/12 21:15
 * description:Map接口遍历方法
 * 1.containsKey:查找键是否存在
 * 2.keySet:获取所有的键
 * 3.entrySet:获取所有的关系k-v
 * 4.values:获取所有的值
 */
@SuppressWarnings("all")
public class MapFor {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put("邓超", new Book("", 100));
        map.put("邓超", "孙俪");//替换-->一会查看源码
        map.put("王宝强", "马蓉");
        map.put("宋喆", "马蓉");
        map.put(null, "刘亦菲");
        map.put("刘亦菲", null);
        map.put("鹿晗", "关晓彤");
        map.put("hsp", "hsp的老婆");

        /*
         * 第一组:先取出所有的key,再通过key取出对应的value
         * */
        System.out.println("=====第一组=====");
        Set keyset = map.keySet();
        //(1)增强for[最简单的]
        System.out.println("=====增强for的方式=====");
        for (Object key : keyset) {
            System.out.println(key + "-" + map.get(key));
        }
        //(2)迭代器
        System.out.println("=====迭代器的方式=====");
        Iterator iterator = keyset.iterator();
        while (iterator.hasNext()) {
            Object next = iterator.next();
            System.out.println(next + "-" + map.get(next));
        }

        System.out.println("=====第二组=====");
        /*第二组
         * 把所有的values取出
         * */
        Collection values = map.values();
        //可以使用所有的Collections使用的遍历方法
        //(1)增强for
        System.out.println("增强for");
        System.out.println("-----取出所有的value-----");
        for (Object value : values) {
            System.out.println("value = " + value);
        }
        //(2)迭代器
        System.out.println("迭代器");
        Iterator iterator1 = values.iterator();
        while (iterator1.hasNext()) {
            Object next = iterator1.next();
            System.out.println("next = " + next);
        }


        System.out.println("=====第三组=====");
        /*
         * 第三组:通过EntrySet来获取 k-v
         * */
        Set entrySet = map.entrySet();//EntrySet<Entry<K,V>>
        //(1)增强for
        System.out.println("-----使用EntrySet的for-----");
        for (Object entry : entrySet) {
            //将entry对象转成Map.entry
            Map.Entry m = (Map.Entry) entry;
            System.out.println(m.getKey() + "-" + m.getValue());
        }
        //(2)迭代器
        System.out.println("-----使用EntrySet的迭代器-----");
        Iterator iterator2 = entrySet.iterator();
        while (iterator2.hasNext()) {
            Object next = iterator2.next();
//            System.out.println(next.getClass());//HashMap$Node--实现--->Map.Entry(getKey,getVaule)
            Map.Entry m = (Map.Entry) next;//向下转型
            System.out.println(m.getKey() + "-" + m.getValue());
        }
    }
}
